/**
 * <strong>Title : ProductionOrderService.java<br>
 * </strong> <strong>Package : cn.b.sky.mes.pp.service<br>
 * </strong> <strong>Description : </strong>@类注释说明写在此处@<br>
 * <strong>Create on : 2015年10月6日 上午10:46:20<br>
 * </strong>
 * <p>
 * @author dapeng.li<br>
 * @version <strong>v1.0.0</strong><br>
 *          <br>
 *          <strong>修改历史:</strong><br>
 *          修改人 | 修改日期 | 修改描述<br>
 *          -------------------------------------------<br>
 *          <br>
 *          <br>
 */
package cn.b.sky.mes.pp.service;

import java.util.List;
import java.util.Map;

import cn.b.sky.mes.pp.model.OperationArchives;
import cn.b.sky.mes.pp.model.ProductionControl;
import cn.b.sky.mes.pp.model.ProductionOrder;
import cn.b.sky.mes.pp.model.ProductionOrderAttachment;
import cn.b.sky.mes.pp.model.condition.ProductionOrderCondition;
import org.springframework.web.multipart.MultipartFile;

import cn.b.sky.common.model.Page;
import cn.b.sky.user.service.model.ECode;

/**
 * <strong>Title : ProductionOrderService.java<br>
 * </strong> <strong>Package : cn.b.sky.mes.pp.service<br>
 * </strong> <strong>Description : </strong>@生产订单业务接口@<br>
 * <strong>Create on : 2015年10月6日 上午10:46:20<br>
 * </strong>
 * <p>
 * 
 * @author dapeng.li<br>
 * @version <strong>v1.0.0</strong><br>
 * <br>
 *          <strong>修改历史:</strong><br>
 *          修改人 | 修改日期 | 修改描述<br>
 *          -------------------------------------------<br>
 * <br>
 * <br>
 */
public interface ProductionOrderService {
  /**
   * 
   * <strong>Title : getProductionOrdersByCondition<br></strong>
   * <strong>Description : </strong>分页查询生产订单<br> 
   * <strong>Create on : 2015-10-9 下午2:35:48<br></strong>
   * <p>
   * @param condition
   * @return
   * Page
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  Page getProductionOrdersByCondition(ProductionOrderCondition condition);

  /**
   * <strong>Title : getProductionOrderByPk<br></strong>
   * <strong>Description : </strong>查询生产订单@<br> 
   * <strong>Create on : 2015-10-12 上午10:47:35<br></strong>
   * <p>
   * @param siteCode
   * @param productionOrderNum
   * @return
   * ProductionOrder
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  ProductionOrder getProductionOrderByPk(String siteCode, String productionOrderNum);

  /**
   * 
   * <strong>Title : deleteProductionOrderByPk<br></strong>
   * <strong>Description : </strong>删除生产订单<br> 
   * <strong>Create on : 2015-10-12 上午10:56:31<br></strong>
   * <p>
   * @param siteCode
   * @param productionOrderNum
   * void
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void deleteProductionOrderByPk(String siteCode, String productionOrderNum);

  /**
   * 
   * <strong>Title : saveProductionOrder<br></strong>
   * <strong>Description : </strong>保存生产订单<br> 
   * <strong>Create on : 2015-10-12 上午10:59:19<br></strong>
   * <p>
   * @param order
   * void
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void saveProductionOrder(ProductionOrder order);

  /**
   * 
   * <strong>Title : modifyProductionOrder<br></strong>
   * <strong>Description : </strong>新增状态的订单修改<br> 
   * <strong>Create on : 2015-10-12 上午11:07:14<br></strong>
   * <p>
   * @param order
   * void
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void modifyProductionOrder(ProductionOrder order);

  /**
   * 
   * <strong>Title : modifyNoCreateProductionOrder<br></strong>
   * <strong>Description : </strong>修改生产订单，状态，分解数量，等字段，非编辑动作或者子订单触发的修改<br> 
   * <strong>Create on : 2016-5-20 上午9:47:16<br></strong>
   * <p>
   * @param order
   * void
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void modifyNoCreateProductionOrder(ProductionOrder order);

  /**
   * 
   * <strong>Title : getProductionControlsByOrder<br></strong>
   * <strong>Description : </strong>获取sfc订单<br> 
   * <strong>Create on : 2016-5-16 下午6:21:47<br></strong>
   * <p>
   * @param siteCode
   * @param productionOrderNum
   * @return
   * List<ProductionControl>
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<ProductionControl> getProductionControlsByOrder(String siteCode, String productionOrderNum);

  /**
   * <strong>Title : placeOrder<br>
   * </strong> <strong>Description : </strong>@方法注释说明写在此处@<br>
   * <strong>Create on : 2015年10月6日 上午10:57:20<br>
   * </strong>
   * <p>
   * 
   * @param orderId
   * @return boolean
   * @throws
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   *          <strong>修改历史:</strong><br>
   *          修改人 | 修改日期 | 修改描述<br>
   *          -------------------------------------------<br>
   * <br>
   * <br>
   */
  boolean placeOrder(String[] orderId);

  /**
   * 
   * <strong>Title : modifyIssuedProductionOrder<br></strong>
   * <strong>Description : </strong>撤回已下达未投产的订单<br> 
   * <strong>Create on : 2015-10-13 下午1:27:13<br></strong>
   * <p>
   * @param productionOrderNum
   * @param siteCode
   * void
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */

  void modifyIssuedProductionOrder(String productionOrderNum, String siteCode);

  /**
   * 
   * <strong>Title : modifyProductionOrderToIssued<br></strong>
   * <strong>Description : </strong>生产订单下达，修改流程为下达的服务<br> 
   * <strong>Create on : 2015-10-14 下午2:25:54<br></strong>
   * <p>
   * @param orderJson
   * void
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void modifyProductionOrderToIssued(String orderJson);

  /**
   * 
   * <strong>Title : releaseProductionControl<br></strong>
   * <strong>Description : </strong>分解sfc订单服务<br> 
   * <strong>Create on : 2016-5-16 下午3:18:32<br></strong>
   * <p>
   * @param orderJson
   * void
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public void releaseProductionControl(String orderJson);

  /**
   * <strong>Title : getProductionOrdersStatus<br></strong>
   * <strong>Description : </strong>生产历史状态查询<br> 
   * <strong>Create on : 2015年10月14日 下午5:20:55<br></strong>
   * <p>
   * @param condition
   * @param ecode
   * @return
   * Map
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  Map getProductionOrdersStatus(ProductionOrderCondition condition, List<ECode> ecode);

  /**
   * 
   * <strong>Title : getUncompletedOrdersByCondition<br></strong>
   * <strong>Description : </strong>获取未完成的订单<br> 
   * <strong>Create on : 2016年1月18日 下午6:43:14<br></strong>
   * <p>
   * @param condition
   * @return
   * Page
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  Page getUncompletedOrdersByCondition(ProductionOrderCondition condition);

  /**
   * 
   * <strong>Title : closeProductionOrder<br></strong>
   * <strong>Description : </strong>关闭<br> 
   * <strong>Create on : 2016-1-19 下午4:23:35<br></strong>
   * <p>
   * @param order
   * void
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void closeProductionOrder(ProductionOrder order);

  /**
   * 
   * <strong>Title : doSplitProduction<br></strong>
   * <strong>Description : </strong>分解生产订单为sfc<br> 
   * <strong>Create on : 2016-5-16 下午2:11:08<br></strong>
   * <p>
   * @param order
   * void
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void doSplitProduction(ProductionOrder order);

  /**
   * 
   * <strong>Title : doModifyProductionOrder<br></strong>
   * <strong>Description : </strong>页面新增状态的订单修改<br> 
   * <strong>Create on : 2016-5-18 上午9:41:26<br></strong>
   * <p>
   * @param order 订单
   * void
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void doModifyProductionOrder(ProductionOrder order);

  /**
   * 
   * <strong>Title : doCloseProductionOrder<br></strong>
   * <strong>Description : </strong>页面关闭生产订单<br> 
   * <strong>Create on : 2016-5-18 上午9:41:55<br></strong>
   * <p>
   * @param siteCode 工厂
   * @param productionOrderNum 订单号
   * void
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void doCloseProductionOrder(String siteCode, String productionOrderNum);

  /**
   * 
   * <strong>Title : doBackProductionOrder<br></strong>
   * <strong>Description : </strong>撤回下达<br> 
   * <strong>Create on : 2016-5-18 上午9:42:08<br></strong>
   * <p>
   * @param productionOrderNum 订单号
   * @param siteCode 工厂
   * void
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void doBackProductionOrder(String productionOrderNum, String siteCode);

  /**
   * 
   * <strong>Title : drawProcessOperation<br></strong>
   * <strong>Description : </strong>绘制工艺图<br> 
   * <strong>Create on : 2016-5-24 下午1:12:18<br></strong>
   * <p>
   * @param siteCode
   * @param processCode
   * @param processRev
   * @return
   * List<OperationArchives>
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<OperationArchives> drawProcessOperation(String siteCode, String processCode, String processRev);

  /**
   * 
   * <strong>Title : saveProductionOrderAttachment<br></strong>
   * <strong>Description : </strong>保存生产订单附件<br> 
   * <strong>Create on : 2016-7-21 下午3:58:54<br></strong>
   * <p>
   * @param siteCode
   * @param file
   * @return
   * ProductionOrderAttachment
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  ProductionOrderAttachment saveProductionOrderAttachment(String siteCode, MultipartFile file);

  /**
   * 
   * <strong>Title : getProductionOrderAttachment<br></strong>
   * <strong>Description : </strong>获取附件列表<br> 
   * <strong>Create on : 2016-7-21 下午5:57:35<br></strong>
   * <p>
   * @param siteCode
   * @param productionOrderNum
   * @return
   * List<ProductionOrderAttachment>
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<ProductionOrderAttachment> getProductionOrderAttachment(String siteCode, String productionOrderNum);
}
